/*
 * 冰淇淋机控制模块实现
 * 功能：实现冰淇淋机所有硬件的控制逻辑，包括执行器控制、传感器读取、
 *       步进电机运动控制和原点回归等功能，采用非阻塞设计提高系统响应性
 */
#include "ice_cream_control.h"
#include "sys_pub.h"






/**
 * @brief 初始化冰淇淋控制模块
 * @details 初始化所有轴状态、执行器状态和系统变量，
 *          必须在使用其他任何控制函数之前调用
 */
void ice_cream_control_init(void) {
    io_driver_init();


    
}
/**
 * @brief 控制顶料1的输出
 * @param state 控制状态：1=开启，0=关闭
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_topping(uint8_t topping_id,uint8_t state)
{
     IO_CONTROL(TOPPING_PIN[topping_id],state);
}

/**
 * @brief 控制果酱1的输出
 * @param state 控制状态：1=开启，0=关闭
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_jam(uint8_t jam_id,uint8_t state)
{
    IO_CONTROL(JAM_PIN[jam_id],state);
}


/**
 * @brief 控制落杯电机
 * @param state 控制状态：1=启动出杯，0=停止
 */
void control_cup_drop_motor(uint8_t state)
 {
       IO_CONTROL(Y6_PIN,state);
}

/**
 * @brief 控制膨化泵
 * @param state 控制状态：1=启动，0=停止
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_expansion_pump(uint8_t state) {
     IO_CONTROL(Y8_PIN, state);
}

/**
 * @brief 控制主压机
 * @param state 控制状态：1=启动，0=停止
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_main_press(uint8_t state) {
    IO_CONTROL(Y14_PIN, state);
}

/**
 * @brief 控制主电机
 * @param state 控制状态：1=启动，0=停止
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_main_motor(uint8_t state) {
    IO_CONTROL(Y15_PIN, state);
}

/**
 * @brief 控制预冷电磁阀
 * @param state 控制状态：1=打开，0=关闭
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_precool_solenoid(uint8_t state) {
    IO_CONTROL( Y16_PIN, state);
}

/**
 * @brief 控制制冷电磁阀
 * @param state 控制状态：1=打开，0=关闭
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_refrigeration_solenoid(uint8_t state) {
    IO_CONTROL(Y17_PIN, state);
}

/**
 * @brief 控制制热电磁阀
 * @param state 控制状态：1=打开，0=关闭
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_heating_solenoid(uint8_t state) {
    IO_CONTROL( Y19_PIN, state);
}

/**
 * @brief 控制杀菌灯
 * @param state 控制状态：1=开启，0=关闭
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_sterilizing_lamp(uint8_t state) {
    IO_CONTROL(Y21_PIN, state);
}

/**
 * @brief 控制提升电机上升
 * @param state 控制状态：1=上升，0=停止
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_lifting_motor_up(uint8_t state)
 {
    if(state)
    {
        IO_CONTROL( LIFT_PLUS_PIN,1);
        IO_CONTROL( LIFT_MINUS_PIN,0);
    }else
    {
        IO_CONTROL( LIFT_PLUS_PIN, 0);
        IO_CONTROL( LIFT_MINUS_PIN, 0);
    }
  
}
/**
 * @brief 控制提升电机下降
 * @param state 控制状态：1=下降，0=停止
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_lifting_motor_down(uint8_t state)
 {
    if(state)
    {
        IO_CONTROL( LIFT_PLUS_PIN, 0);
        IO_CONTROL( LIFT_MINUS_PIN, 1);
    }else
    {
        IO_CONTROL(LIFT_PLUS_PIN, 0);
        IO_CONTROL(LIFT_MINUS_PIN, 0);
    }
  
}
/**
 * @brief 控制门电机
 * @param state 控制状态：1=开门，0=关门
 * @param duration_ms 持续时间（毫秒），0表示持续运行直到手动关闭
 */
void control_door_motor(uint8_t state) {
    if(state)
    {
        IO_CONTROL(DOOR_PLUS_PIN, 1);
        IO_CONTROL(DOOR_MINUS_PIN, 0);
    }else
    {
         IO_CONTROL(DOOR_PLUS_PIN, 0);
        IO_CONTROL(DOOR_MINUS_PIN, 1);
    }
   
   
}

/**
 * @brief 读取X轴原点传感器状态
 * @return 1=检测到原点，0=未检测到
 */
uint8_t read_x_axis_origin(void)
{
    return IO_READ(X0_PIN);


}

/**
 * @brief 读取Z轴原点传感器状态
 * @return 1=检测到原点，0=未检测到
 */
uint8_t read_z_axis_origin(void)
{

    return IO_READ(X1_PIN);
}
/**
 * @brief 读取落杯位置传感器状态
 * @return 1=杯子到位，0=未到位
 */
uint8_t read_cup_drop_pos_1(void) {
    return IO_READ(X4_PIN);
}

/**
 * @brief 读取杯子检测传感器状态
 * @return 1=检测到杯子，0=未检测到
 */
uint8_t read_cup_detection(void) {
    return IO_READ(X7_PIN);
}

/**
 * @brief 读取原料欠料传感器状态
 * @return 1=欠料，0=料位正常
 */
uint8_t read_float_material_low(void) {
    return IO_READ(X4_PIN);
}

/**
 * @brief 读取对射传感器状态
 * @return 1=被遮挡，0=无遮挡
 */
uint8_t read_photoelectric_signal(void) {
    return IO_READ(X11_PIN);
}

/**
 * @brief 读取夹手开关状态
 * @return 1=开关闭合，0=开关断开
 */
uint8_t read_gripper_switch(void) {
    return IO_READ(X12_PIN);
}


